# 解释器模式

# ⭐=> 定义一种语言的文法表示，并创建一个解释器，该解释器能够解释该语言中的句子

# 角色
# 1. 抽象表达式（Abstract Expression）：定义了一个抽象的解释操作，通常是一个接口或抽象类，
# 该接口或抽象类中定义了一个interpret()方法，用于解释表达式。
# 2. 终结符表达式（Terminal Expression）：实现了抽象表达式接口，
# 用于解释终结符表达式，即表达式中的每个终结符都对应一个终结符表达式类。
# 3. 非终结符表达式（Nonterminal Expression）：实现了抽象表达式接口，
# 用于解释非终结符表达式，即表达式中的每个非终结符都对应一个非终结符表达式类。
# 4. 环境（Context）：用于存储解释器的上下文信息，
# 通常包含了需要解释的表达式以及相关的全局信息。
# 5. 客户端（Client）：创建并配置解释器，然后调用解释器的interpret()方法来解释表达式。

from abc import ABCMeta, abstractmethod

class AbstractExpression(metaclass=ABCMeta):
    @abstractmethod
    def interpret(self, context):
        pass

class TerminalExpression(AbstractExpression):
    def interpret(self, context):
        print("TerminalExpression interpret", context)

class NonterminalExpression(AbstractExpression):
    def interpret(self, context):
        print("NonterminalExpression interpret", context)

class Context:
    def __init__(self, context):
        self.context = context

if __name__ == "__main__":
    context = Context("Hello World")
    terminal_expression = TerminalExpression()
    nonterminal_expression = NonterminalExpression()
    terminal_expression.interpret(context.context)
    nonterminal_expression.interpret(context.context)

    